home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 25
/
Cream of the Crop 25.iso
/
games
/
dcg408up.zip
/
ADDENDUM.TXT
next >
Wrap
Text File
|
1997-03-05
|
12KB
|
301 lines
This file lists the SYNTAX of new or modified functions not documented
in the DCGAMES 4.00 Script Reference Guide.
-----------------------------------------------------------------------
The LOADIBK function has been added to be able to load instrument
banks (in Sound Blaster IBK format) from the scripts. Two instrument
banks are provided: MT32.IBK and GMIDI.IBK. The default instrument
bank is MT32. The GMIDI file contains the General MIDI standard
instruments. If you copy any of this files to DCMUSIC.IBK then it
will be loaded automatically when the game driver starts as the
default instrument bank. This affects only MIDI music files.
Example:
loadibk( "GMIDI.IBK" );
music( "mymusic.mid" );
-----------------------------------------------------------------------
The VIEWPCX, VIEWGIF and VIEWFLI commands now support 2 new arguments.
The FRAME argument centers the image inside the currently defined
frame as set by SET_FRAME(). The PALETTE argument causes the image's
palette to be loaded. The default is for the palette NOT to be loaded,
using instead the current palette. In 4.07 the default was for the
palette to BE loaded.
Example:
VIEWPCX( FRAME, "myfile.pcx" );
VIEWGIF( "myimage.gif", PALETTE );
VIEWFLI( FRAME, "mymovie.fli", PALETTE );
-----------------------------------------------------------------------
The WAITCK() and TIMECK() functions will wait a specified amount of
time. The parameter is in CLOCK TICKS. There are exactly 18.2 clock
ticks in one second.
Example:
! Move the NPC 10 steps to the right, taking one step
! roughly every quarter of a second (5 ticks).
for L0 = 1 to 10 do
npc.x = npc.x + 1;
timeck( 5 );
endfor;
-----------------------------------------------------------------------
The TIMER function will return the number of clock ticks since
mid night. This can be used to track the passage of real time,
but care must be taken when playing at mid night :)
Example:
! Do some stuff for about 10 seconds (182 tics)
L30 = TIMER; ! Remember the time now..
while TIMER - L30 < 182 do
.. keep doing stuff ..
endwhile;
-----------------------------------------------------------------------
The FOREACH loop construct has been extended so that you can make
a loop through all VISIBLE (on the screen) NPCs or OBJECTS. This
is very usefull for animation, since you only have to animate the
visible NPCs!
Example:
foreach VISIBLE npc do
...
endfor;
-----------------------------------------------------------------------
READTEXT( block# [, line#] );
or READTEXT( "fname.txt" );
Where:
block# is the number of the text block (in TEXT.DTA) to read
line# is the optional line number (if not given, all 16 lines are read)
If "fname.txt" is specified, the given text file is read instead.
NEW FUNCTIONALITY: Starting with version 4.07, the READTEXT function
will look for "DCTXTVHx.PCX" (where VHx is VHI, VH1, etc.). For full
block reads (line# omitted), the text is displayed inside the image
with 10 pixel margins. You can change the PCX image to anything you
want.
You may also specify line# = -1, which tells READTEXT that an image
has already been displayed (through SET_FRAME + VIEWPCX), and that
the text should be displayed inside that image, instead of DCTXTVHx.PCX).
Example:
! Show a book's text inside a book picture...
setframe( "SPELBOOK.PCX", 35, 15, 15, 15 );
viewpcx( "SPELBOOK.PCX" );
readtext( object.text, -1 );
! Show a SIGN's text inside the standard PCX background
readtext( object.text );
-----------------------------------------------------------------------
SAVEGIF( "FILENAME.GIF" );
Saves the current screen to "filename.gif". See SAVEPCX() for more
details. See also VIEWGIF(), which is identical to VIEWPCX(), except
is shows GIF images.
-----------------------------------------------------------------------
<ret> = MSGBOX( blk#, btn#, b1 [, b2 [, b3]], "message text" );
where:
<ret> is 0, 1 or 2 depending on which button is pressed
blk# is the block # from the DCSYSTEM.VHx tiles to display
btn# is the number of buttons to display (1, 2 or 3)
b1 is the text for button 1
b2 is the text for button 2
b3 is the text for button 3
Example:
if msgbox( QUESTION, 2, "Yes", "No", "Open it?" ) = 0 then
.. go ahead and open it..
endif;
-----------------------------------------------------------------------
PAINT( SMALL | LARGE | SCREEN | WINDOW );
The new parameters (SMALL and LARGE) switch between the small
screen mode (window on the left for the world and stats/menu
area on the right) and full screen mode (no stats/menu area).
See also related function "SPLIT"
-----------------------------------------------------------------------
<ret> = SPLIT;
where:
<ret> is TRUE (non zero) if the game is currently in split mode (with
the stats/menu/inventory area visible on the right.
Example:
L0 = SPLIT; ! Remember the current mode
paint( SMALL ); ! Switch to small mode
... ! Do something in small mode
if not L0 then paint( LARGE ); endif; ! Restore old mode..
-----------------------------------------------------------------------
<ret> = LOS( <from>, <to> [, <tlist>] );
where:
<ret> is TRUE (non zero) if a path straight line path between
-----------------------------------------------------------------------
<ret> = LOS( <from>, <to> [, <tlist>] );
where:
<ret> is TRUE (non zero) if a path straight line path between
-----------------------------------------------------------------------
<ret> = LOS( <from>, <to> [, <tlist>] );
where:
<ret> is TRUE (non zero) if a path straight line path between
<from> and <to> contains only landscape tiles of the transparency
given in the (optional) <tlist>.
<from> is an X/Y location, which can be NPC, PLAYER, OBJECT or two
numeric expressions. See examples.
<to> is an X/Y location, which can be NPC, PLAYER, OBJECT or two
numeric expressions. See examples.
<tlist> is a comma separated list of one or more transparency values
to be checked. The default is 0. Names for these values can
be found in [LAND TRANSPARENCY] in the DCCTOKEN.DAT file,
where CLEAR = 0 and SOLID = 1. You can change this and create
different "levels" of transparency (say 0 to 3) and allow
the player to "see" 0 to 2 during the day and 0 to 1 during
the night, for example.
Examples:
The NPC animation routines use LOS to determine if the NPC can see
the player. If they can, they "walk" towards the player (only the
hostile NPCs do this).
if LOS( npc, player ) then
<move the npc...>
endif;
-----------------------------------------------------------------------
<ret> = LOR( <from>, <to> [, <dlist>] );
where:
<ret> is TRUE (non zero) if a path straight line path between
<from> and <to> contains only landscape tiles of the DENSITY
given in the (optional) <dlist>.
<from> is an X/Y location, which can be NPC, PLAYER, OBJECT or two
numeric expressions. See examples.
<to> is an X/Y location, which can be NPC, PLAYER, OBJECT or two
numeric expressions. See examples.
<dlist> is a comma separated list of one or more density values to be
checked. The default is 0. Names for these values can
be found in [WORLD DENSITY] in the DCCTOKEN.DAT file, where
FLAT = 0, ROUGH = 1, etc. Note that the default of 0 is not
very useful. Players and NPCs can walk on different terrains
depending on the type of vehicle or type of npc. For example,
a Sea Dragon can walk on DEEP and ROUGH WATER.
Examples:
I didn't use LOR() in any of the examples so far. You might want
to make it so that an NPC doesn't start moving towards a player
unless they can SEE the player AND they can REACH the player:
if LOS( npc, player ) and LOR( npc, player, LAND, ROUGH ) then
<move the npc...>
endif;
Note that the above example applies only to land based NPCs. For
Water based NPCs, it would be:
if LOS( npc, player ) and LOR( npc, player, DEEP_WATER, ROUGH_WATER ) then
<move the npc...>
endif;
Here is an example using LOR to see if a player can REACH a certain
DOOR from where they are standing:
if visible( world.doorx(1), world.doory(1) ) and
LOR( player, world.doorx(1), world.doory(1), FLAT, ROUGH ) then
<door is visible and player can reach it, so maybe take
control of the player and "walk" him over to that door..>
..
endif;
-----------------------------------------------------------------------
<svar> = SWRITE[LN]( ... );
Identical to a WRITE and WRITELN, except the value is written to the
string variable instead of the text window.
-----------------------------------------------------------------------
PWRITE[LN]( ... );
Identical to a WRITE and WRITELN, except the text is written to the
text window formed within a PCX image file displayed using VIEWPCX()
within the margins specified using SET_FRAME().
Example:
set_frame( "scroll.pcx", 30, 40, 30, 40, 0 );
viewpcx ( "scroll.pcx" );
pwrite( "Name: ", object.name );
write( "You see a ", object.class, " scroll." );
Note that PWRITE[LN] starts writting at the top of the image and
scrolls down. If you want to clear the image and start writting
at the top again, you need to re-issue the set_frame() AND the
viewpcx() calls.
-----------------------------------------------------------------------
SET_FRAME( pcx, lft, top, rgt, bot, color );
Where:
pcx is a file containing a PCX image file.
lft is the margin from the left.
top is the margin from the top.
rgt is the margin on the right.
bot is the margin on the bottom.
color is the color to use for the text (default 0 = black).
----------------------------------------------------------------------
VOLUME( v1 [, v2 ] );
Sets the volume level. If only one volume is specified (v1), it is
used for both left and right speakers. If the two are specified, then
they are used for LEFT and RIGHT speakers respectively.
The value of V1 and V2 must be between 0 and 15. Note that 6 is barely
audible while 15 is VERY LOUD!. The default volume is 12.
---------------------------------------------------------
Syntax NEW( NPC|OBJECT, x, y, block# );
Purpose Creates a new npc or object.
Parameters NPC or object to be made
X - x location
Y - y location
Block# - # of tile to be assigned to object/NPC
Remarks None
Examples
if group.y > 0 then
L0 = group.x;
L1 = group.y - 1;
elsif group.x > 0 then
L0 = group.x - 1;
L1 = group.y;
else
L0 = group.x + 1;
L1 = group.y + 1;
endif;
! Create an NPC next to the player with a tile
! selected at random between 30 and 37.
new(npc,L0,L1, 30 + random(8) );
See CONTROL.SCR for a more detailed example. The
control script uses the DCWORLD defined defaults
for statistics (DEFSTAT array) and tiles (DEFLANDBLK,
DEFWATERBLK, DEFSPOOKBLK and DEFCAVEBLK) to set
the NPC's statistics depending on size (small=0,
medium=1, large=2, pirate boat=3) and the tiles.
This logic starts with label :NEWMONSTER.